package com.example.crud_demo.business.material.mapper;

import com.example.crud_demo.business.material.dto.MaterialDTO;
import com.example.crud_demo.business.material.entity.Material;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * @author 陈粮
 * @contact  18434365993
 * 物料与数据库持久层封装接口
 */
@Mapper
public interface MaterialMapper {
    /**
     * 插入接口
     * @param material 物料信息
     * @return 影响行数
     */
    int insert(Material material);

    /**
     * 更新接口
     * @param material 物料信息
     * @return 影响行数
     */
    int update(Material material);

    /**
     * 删除接口
     * @param id 物料id
     * @param version 乐观锁版本号
     * @return 影响行数
     */
    int delete(@Param("id") Long id, @Param("version") Integer version);

    /**
     * 通过id查询物料
     * @param id 物料id
     * @return id对应的物料信息
     */
    Material selectById(@Param("id") Long id);

    /**
     * 通过id跟乐观锁版本号查询
     * @param id 物料id
     * @param version 乐观锁版本号
     * @return id跟乐观锁版本号对应的物料信息
     */
    Material selectByIdAndVersion(@Param("id") Long id, @Param("version") Integer version);

    /**
     * 查询所有的物料
     * @return 所有的物料信息
     */
    List<Material> selectAll();

    /**
     * 通过物料名称查询
     * @param name 物料名称
     * @return 物料名称对应的物料信息
     */
    Material selectByName(@Param("name") String name);

    /**
     * 模糊查询
     * @param material 查询字段封装
     * @return 模糊查询结果
     */
    List<Material> select(MaterialDTO material);
}